<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TCP滑动窗口机制详解</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        .card-hover {
            transition: all 0.3s ease;
            border: 2px solid transparent;
        }
        
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            border-color: #667eea;
        }
        
        .feature-icon {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        
        .section-title {
            position: relative;
            padding-left: 20px;
        }
        
        .section-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 100%;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        .first-letter {
            float: left;
            font-size: 4rem;
            line-height: 3rem;
            padding-right: 8px;
            margin-top: 3px;
            font-weight: 700;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        .animate-fadeInUp {
            animation: fadeInUp 0.8s ease-out;
        }
        
        .mermaid {
            display: flex;
            justify-content: center;
            margin: 2rem 0;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="hero-gradient text-white py-20 px-6">
        <div class="max-w-6xl mx-auto text-center animate-fadeInUp">
            <h1 class="text-5xl md:text-6xl font-bold mb-6">
                <i class="fas fa-network-wired mr-4"></i>TCP 滑动窗口机制
            </h1>
            <p class="text-xl md:text-2xl mb-8 opacity-90">深入理解网络传输的核心技术</p>
            <div class="flex justify-center space-x-6 text-lg">
                <span><i class="fas fa-tachometer-alt mr-2"></i>流量控制</span>
                <span><i class="fas fa-shield-alt mr-2"></i>可靠传输</span>
                <span><i class="fas fa-rocket mr-2"></i>高效传输</span>
            </div>
        </div>
    </section>

    <!-- Introduction Section -->
    <section class="py-16 px-6">
        <div class="max-w-4xl mx-auto bg-white rounded-2xl shadow-xl p-10">
            <p class="text-lg leading-relaxed text-gray-700">
                <span class="first-letter">滑</span>动窗口（Sliding Window）是 TCP 协议中的一个核心机制，用于管理数据传输的流量控制和拥塞控制。它通过控制发送和接收窗口的大小，优化了数据的传输效率和网络资源的利用。确保了网络数据传输的稳定性和高效性。它使得 TCP 能够在各种网络条件下有效管理数据流动，优化网络资源的利用。
            </p>
        </div>
    </section>

    <!-- Visualization Section -->
    <section class="py-12 px-6">
        <div class="max-w-6xl mx-auto">
            <h2 class="text-3xl font-bold text-center mb-10 text-gray-800">
                <i class="fas fa-sitemap mr-3 feature-icon"></i>滑动窗口机制架构图
            </h2>
            <div class="bg-white rounded-2xl shadow-lg p-8">
                <div class="mermaid">
                    graph TB
                        A[滑动窗口机制] --> B[流量控制]
                        A --> C[拥塞控制]
                        A --> D[可靠传输]
                        
                        B --> B1[窗口大小调整]
                        B --> B2[缓冲区管理]
                        
                        C --> C1[慢启动]
                        C --> C2[拥塞避免]
                        
                        D --> D1[数据确认ACK]
                        D --> D2[超时重传]
                        D --> D3[按序交付]
                        
                        style A fill:#667eea,stroke:#fff,stroke-width:3px,color:#fff
                        style B fill:#9f7aea,stroke:#fff,stroke-width:2px,color:#fff
                        style C fill:#9f7aea,stroke:#fff,stroke-width:2px,color:#fff
                        style D fill:#9f7aea,stroke:#fff,stroke-width:2px,color:#fff
                </div>
            </div>
        </div>
    </section>

    <!-- Features Grid -->
    <section class="py-16 px-6 bg-gray-50">
        <div class="max-w-6xl mx-auto">
            <h2 class="text-4xl font-bold text-center mb-12 text-gray-800">核心功能详解</h2>
            
            <div class="grid md:grid-cols-2 gap-8">
                <!-- Feature 1 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-water mr-3 text-3xl feature-icon"></i>1. 流量控制
                    </h3>
                    <p class="text-gray-600 leading-relaxed mb-4">
                        滑动窗口机制的主要作用之一是流量控制。它通过控制发送端可以发送的数据量来防止接收端缓冲区溢出。接收端通过窗口大小告知发送端它的缓存能力，从而限制发送端的数据发送速率，确保接收端能够及时处理接收到的数据。
                    </p>
                    <div class="bg-purple-50 rounded-lg p-4">
                        <p class="text-sm text-purple-800">
                            <strong>窗口大小：</strong>窗口的大小由接收端的接收缓存容量决定。接收端会在 ACK 消息中包含窗口大小信息，发送端根据该信息调整发送数据的数量。
                        </p>
                    </div>
                </div>

                <!-- Feature 2 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-shield-virus mr-3 text-3xl feature-icon"></i>2. 避免数据丢失
                    </h3>
                    <p class="text-gray-600 leading-relaxed mb-4">
                        滑动窗口通过限制发送的数据量，避免了因接收端缓存不足而导致的数据丢失。通过在数据传输过程中动态调整窗口大小，滑动窗口确保接收端能够处理和确认收到的数据，从而避免了因缓冲区溢出而丢失的数据。
                    </p>
                    <div class="bg-blue-50 rounded-lg p-4">
                        <p class="text-sm text-blue-800">
                            <strong>数据确认：</strong>接收端确认每个接收到的数据包，并在 ACK 消息中更新窗口大小，以便发送端能调整数据发送策略。
                        </p>
                    </div>
                </div>

                <!-- Feature 3 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-tachometer-alt mr-3 text-3xl feature-icon"></i>3. 提高数据传输效率
                    </h3>
                    <p class="text-gray-600 leading-relaxed mb-4">
                        滑动窗口机制能够提高数据传输效率。由于它允许发送端在未收到确认的情况下继续发送多个数据包，因此可以减少等待时间，从而提高数据传输速率。这种机制使得网络带宽得到充分利用，减少了网络延迟。
                    </p>
                    <div class="bg-green-50 rounded-lg p-4">
                        <p class="text-sm text-green-800">
                            <strong>并行传输：</strong>在发送窗口内的多个数据包可以同时传输，增加了数据的并行性和吞吐量。
                        </p>
                    </div>
                </div>

                <!-- Feature 4 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-sync-alt mr-3 text-3xl feature-icon"></i>4. 动态调整
                    </h3>
                    <p class="text-gray-600 leading-relaxed mb-4">
                        滑动窗口机制是动态的，会根据网络的实际状况和接收端的处理能力调整窗口大小。发送端根据接收端的反馈调整发送的数据量，从而实现动态的流量控制和拥塞控制。
                    </p>
                    <div class="bg-yellow-50 rounded-lg p-4">
                        <p class="text-sm text-yellow-800">
                            <strong>自适应调整：</strong>窗口大小会随着网络状况和接收端的缓存情况自动调整，以适应不同的网络条件和负载变化。
                        </p>
                    </div>
                </div>

                <!-- Feature 5 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-traffic-light mr-3 text-3xl feature-icon"></i>5. 拥塞控制
                    </h3>
                    <p class="text-gray-600 leading-relaxed mb-4">
                        滑动窗口在拥塞控制中也起着重要作用。通过调整窗口大小，滑动窗口机制可以避免网络拥塞和缓解网络负载过重的情况。它与 TCP 的拥塞控制算法（如慢启动、拥塞避免）配合使用，共同管理网络资源。
                    </p>
                    <div class="bg-red-50 rounded-lg p-4">
                        <p class="text-sm text-red-800">
                            <strong>拥塞避免：</strong>滑动窗口机制通过减少发送的数据量来控制网络拥塞，防止网络过载。
                        </p>
                    </div>
                </div>

                <!-- Feature 6 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-check-double mr-3 text-3xl feature-icon"></i>6. 可靠数据传输
                    </h3>
                    <p class="text-gray-600 leading-relaxed mb-4">
                        滑动窗口机制有助于实现可靠的数据传输。它通过确保数据包按序到达并进行正确确认，避免了数据丢失、重复接收或乱序等问题。滑动窗口的 ACK 机制确保了数据的可靠交付。
                    </p>
                    <div class="bg-indigo-50 rounded-lg p-4">
                        <p class="text-sm text-indigo-800">
                            <strong>数据重传：</strong>滑动窗口机制与超时重传机制配合使用，确保丢失的数据包能够重新发送和接收。
                        </p>
                    </div>
                </div>

                <!-- Feature 7 -->
                <div class="bg-white rounded-xl shadow-lg p-8 card-hover md:col-span-2">
                    <h3 class="section-title text-2xl font-bold mb-4 text-gray-800">
                        <i class="fas fa-database mr-3 